package cn.dvptech.remotemate.screenmirror.server;

import java.nio.ByteBuffer;


/**
 *    author  : ulongx
 *    website : www.dvptech.cn
 *    date    : 2024/7/21
 *    desc    : 根据特定协议将数据编码为字节数组。
 */
public class MessageEncoder {
    private byte[] data;    //要发送的内容

    public MessageEncoder(byte[] buff) {
        this.data = buff;
    }

    /**
     * 根据协议将数据打包成字节数组：
     * 1 字节：消息类型
     * 4 字节：数据长度 (int)
     * 可变：数据
     *
     * @param messageType 类型：01-视频 02-字符串 03-音频
     * @return 编码后的消息作为字节数组，如果数据为空则返回 null。
     */
    public byte[] buildSendContent(MessageType messageType) {
        if (data == null || data.length == 0) {
            return null;
        }
        ByteBuffer bb  = ByteBuffer.allocate(1 + 4 + data.length);
        switch (messageType) {
            case VIDEO:
                bb.clear();
                bb.put("1".getBytes());
                bb.put(int2Bytes(data.length));
                bb.put(data);
                break;
            case TEXT:
                bb.clear();
                bb.put("2".getBytes());
                bb.put(int2Bytes(data.length));
                bb.put(data);
                break;
            default:
                break;
        }
        return bb.array();
    }

    /**
     * 将int转为长度为4的byte数组
     *
     * @param length
     * @return
     */
    public static byte[] int2Bytes(int length) {
        byte[] result = new byte[4];
        result[0] = (byte) length;
        result[1] = (byte) (length >> 8);
        result[2] = (byte) (length >> 16);
        result[3] = (byte) (length >> 24);
        return result;
    }

    enum MessageType {
        VIDEO,
        AUDIO,
        TEXT
    }
}
